package handler

import (
	"beetle/internal/biz"
	"beetle/internal/model"
	"beetle/internal/pkg/tool"
	"github.com/kataras/iris/v12"
	"strconv"
)

// redisSettingHandler 处理RedisSetting请求信息
type redisSettingHandler struct {
	srv biz.RedisSettingService
}

func NewRedisSettingHanler(srv biz.RedisSettingService) *redisSettingHandler {
	return &redisSettingHandler{srv}
}

// TODO 保存配置
func (handler *redisSettingHandler) SaveRedisSetting(ctx iris.Context) {
	var setting model.RedisSetting
	err := ctx.ReadJSON(&setting)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	err = handler.srv.Save(&setting)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	ctx.JSON(tool.Success())
}

// TODO 更新配置
func (handler *redisSettingHandler) UpdateRedisSetting(ctx iris.Context) {

	var setting model.RedisSetting
	err := ctx.ReadJSON(&setting)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	err = handler.srv.Update(&setting)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	ctx.JSON(tool.Success())

}

// TODO 删除配置
func (handler *redisSettingHandler) RemoveRedisSetting(ctx iris.Context) {
	id := ctx.Params().Get("id")
	pk, err := strconv.Atoi(id)
	if err != nil {
		if err != nil {
			ctx.JSON(tool.Fail(err.Error()))
			return
		}
	}
	err = handler.srv.Remove(pk)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	ctx.JSON(tool.Success())

}

// TODO 查询单个配置
func (handler *redisSettingHandler) GetRedisSetting(ctx iris.Context) {

	id := ctx.Params().Get("id")
	pk, err := strconv.Atoi(id)
	if err != nil {
		if err != nil {
			ctx.JSON(tool.Fail(err.Error()))
			return
		}
	}
	redisSetting, err := handler.srv.Find(pk)
	if err != nil {
		if err != nil {
			ctx.JSON(tool.Fail(err.Error()))
			return
		}
	}
	ctx.JSON(tool.Data(redisSetting))

}

// TODO 查询列表
func (handler *redisSettingHandler) ListRedisSetting(ctx iris.Context) {
	var setting model.RedisSetting
	err := ctx.ReadJSON(&setting)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	list := handler.srv.List(&setting)
	ctx.JSON(tool.Data(list))
}

// TODO 查询下拉列表
func (handler *redisSettingHandler) OptionRedisSetting(ctx iris.Context) {
	list := handler.srv.Option()
	ctx.JSON(tool.Data(list))
}

func (handler *redisSettingHandler) CheckRedisSetting(ctx iris.Context) {
	id := ctx.Params().Get("id")
	pk, err := strconv.Atoi(id)
	if err != nil {
		if err != nil {
			ctx.JSON(tool.Fail(err.Error()))
			return
		}
	}
	err = handler.srv.CheckConn(pk)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	ctx.JSON(tool.Data("PONG"))
}
